package TP3;

import TP1.TDA.ColaTDA;
import TP2.Utils;
import TP2.TDA.ConjuntoTDA;
import TP2.implementation.ColaListaImpl;
import TP2.implementation.ConjuntoTamNoAcotListaImpl1;

public class ColaTDAMetodos {

	public static void main(String[] args) {
		runTests();
	}
	
	private static void runTests() {
		testEliminarRepetidos();
		testRepetidos();
	}
	
	private static void testEliminarRepetidos() {
		System.out.println("\nInicio test eliminarRepetidos:");
		
		ColaTDA cola = new ColaListaImpl();
		cola.inicializar();
		
		cola.acolar(1);
		cola.acolar(3);
		cola.acolar(5);
		cola.acolar(3);
		cola.acolar(4);
		cola.acolar(7);
		cola.acolar(2);
		cola.acolar(5);
		cola.acolar(9);
		
		System.out.println("Cola:");
		Utils.imprimirCola(cola);
		
		eliminarRepetidos(cola);
		
		System.out.println("Cola despues:");
		Utils.imprimirCola(cola);
		
		System.out.println("Fin test eliminarRepetidos.");
	}
	
	private static void testRepetidos() {
		System.out.println("\nInicio test repetidos:");
		
		ColaTDA cola = new ColaListaImpl();
		cola.inicializar();
		
		cola.acolar(1);
		cola.acolar(3);
		cola.acolar(5);
		cola.acolar(3);
		cola.acolar(4);
		cola.acolar(7);
		cola.acolar(2);
		cola.acolar(5);
		cola.acolar(9);
		
		ConjuntoTDA repetidos = repetidos(cola);
		
		System.out.println("Repetidos:");
		Utils.imprimirConjunto(repetidos);
		
		System.out.println("Fin test repetidos.");
	}
	
	private static void eliminarRepetidos(ColaTDA cola) {
		ColaTDA aux = new ColaListaImpl();
		aux.inicializar();
		ConjuntoTDA conj = new ConjuntoTamNoAcotListaImpl1();
		conj.inicializar();
		
		Utils.pasarCola(cola, aux);
		
		while(!aux.vacia()) {
			if(!conj.pertenece(aux.primero())) {
				cola.acolar(aux.primero());
			}
			conj.agregar(aux.primero());
			aux.desacolar();
		}		
	}
	
	private static ConjuntoTDA repetidos(ColaTDA cola) {
		ConjuntoTDA aux = new ConjuntoTamNoAcotListaImpl1();
		aux.inicializar();
		ConjuntoTDA ret = new ConjuntoTamNoAcotListaImpl1();
		ret.inicializar();
		ColaTDA colaAux = new ColaListaImpl();		
		colaAux.inicializar();
		
		Utils.copiarCola(cola, colaAux);
		
		while(!colaAux.vacia()) {
			if(aux.pertenece(colaAux.primero())) {
				ret.agregar(colaAux.primero());
			}
			aux.agregar(colaAux.primero());
			colaAux.desacolar();
		}
		
		return ret;
	}
}
